/**
 * @Description:
 * @Author 卞鹏飞 <228443632@qq.com>
 * @create 05/08/24 2:25 PM
 */
import type { ITreeItem, ITreeItemBase } from '@root/types/tree.ts'
import type { TVisible, TEnable } from './base.ts'

/**
 * 用户信息
 */
interface _IAppStateUserInfo {
  /**
   * 用户id
   */
  id: string
  /**
   * 机构id
   */
  orgId: string
  name: string
  empCode: string
  empName: string
  mobile: string
  email: string
  deptId: string
  deptName: string
  /**
   * 是否第一次登录 0 是 1 否
   */
  firstLoginFlag: TEnable
}
export type IAppStateUserInfo = Partial<_IAppStateUserInfo>

/**
 * app tabs栏参数
 */
interface _IAppStateTabItem {
  /**
   * tab 唯一标识
   */
  key: string
  /**
   * tab 对应路由的全路径
   */
  fullPath: string
  /**
   * tab 标题
   */
  title: string

  /**
   * 是否分组
   */
  group: boolean
  meta: Record<string, any>
  query: Record<string, any>
}
export type IAppStateTabItem = Partial<_IAppStateTabItem>

/**
 * 当前应用通用请求头
 */
interface _IAppStateAppHeaderInfo {
  version: string // 软件版本
  mode: 'PC' // 渠道
  clientType: 'opr' // 应用类型 运营中心
  deviceBrand: string // 设备品牌
  deviceModel: string // 设备型号
  deviceId: string // 设备唯一标识
}
export type IAppStateAppHeaderInfo = Partial<_IAppStateAppHeaderInfo>

// 后台 view试图 内容相关数据
interface _IAppStateAppDOMInfo {
  /**
   * 内容区域宽度
   */
  width: number
  /**
   * 内容区域高度
   */
  height: number
  /**
   * 内容体dom
   */
  el: HTMLElement

  /**
   * 距离左侧距离
   */
  left: number
  /**
   * 距离顶部距离
   */
  top: number
}
export type IAppStateAppDOMInfo = Partial<_IAppStateAppDOMInfo>

/**
 * 部门
 */
interface _IAppStateDepartTreeItem extends ITreeItem<_IAppStateDepartTreeItem>, ITreeItemBase {
  id: string
  pid: string
  children: Partial<_IAppStateDepartTreeItem>[]
  /**
   * 部门类型 1 机构 2 部门
   */
  branchType: '1' | '2'
  /**
   * 部门名称
   */
  branchName: string
  branchSort: string
  createTime: string
  /**
   * 部门整体路径
   */
  branchManager: string

  /**
   * 是否可以切换 0 是 1 否
   */
  switchable: TEnable

  // 整体路径
  departNameByPath: string
}
export type IAppStateDepartTreeItem = Partial<_IAppStateDepartTreeItem>
export type IAppStateDepartTree = IAppStateDepartTreeItem[] & {
  /**
   * 整体是否加载结束 标识
   */
  __hasLoaded__: boolean
}

// 菜单
interface _IAppStateMenuDataItem extends ITreeItem<_IAppStateMenuDataItem>, ITreeItemBase {
  id: string
  pid: string
  children: Partial<_IAppStateMenuDataItem>[]
  /**
   * 菜单类型
   * 1 目录 2 菜单 3 按钮
   */
  menuType: '0' | '1' | '2' | '3'
  /**
   * 图标
   */
  icon: string
  /**
   * 图标 激活
   */
  activeIcon: string
  /**
   * 菜单名称
   */
  menuName: string
  sort: number
  /**
   * 菜单路径
   */
  path: string
  /**
   * 前端按钮权限
   */
  permissionCode: string
  /**
   * 后端数据 真实权限
   */
  realPermissionCode: string
  /**
   * 是否需要数据权限标识
   */
  dataPermissionFlag: string
  enableFlag: TVisible
  createTime: number
  index: string

  // 同 menuType
  type: '0' | '1' | '2' | '3'
  // 同 permissionCode
  code: string
  visible: TVisible
  name: string
  exp: string | RegExp
  /**
   * 是否是 动态路由
   */
  __isDynamic: boolean
  /**
   * 路径额外参数
   */
  params: Record<string, any> | string

  __samePathNodes__: _IAppStateMenuDataItem[]
}
export type IAppStateMenuDataItem = Partial<_IAppStateMenuDataItem>
export type IAppStateMenuData = IAppStateMenuDataItem[] & { __hasLoaded__: boolean }
